사용자가 웹 브라우저 주소창에 URL을 입력했을 때, 서버가 어떤 페이지나 데이터를 보여줄지 결정하는 과정입니다.
마치 집 주소를 보고 우편물을 배달하는 길잡이와 같습니다.
HandStack은 이 과정을 매우 편리하게 자동화합니다.
kebab-case
라우팅 적용 범위는 Controller 와 Pages 입니다.
HandStack은 C# Controller의 이름과 메서드(Action) 이름을 조합하여 API 주소를 자동으로 만듭니다.
예시:
UserManagementController
GetUserProfile
/user-management/get-user-profile
코드에서는 다음과 같은 속성(Attribute)으로 정의됩니다.
[Area("[모듈 ID]")] [Route("[area]/api/[controller]")] public class UserManagementController : Controller { [HttpGet("[action]")] public async Task<object> GetUserProfile() { // ... 로직 ... } }
웹 페이지를 만드는 Razor Pages의 경우, 파일과 폴더의 경로가 그대로 URL 주소가 됩니다.
Pages/UserProfile/EditProfile.cshtml
/user-profile/edit-profile
페이지 상단에는 어떤 모듈에 속하는지 명시합니다.
@page @model [모듈 ID].Areas.[모듈 ID].Pages.UserProfile.EditProfileModel @{ // ... 페이지 내용 ... }
실제 프로젝트 파일이 어떻게 URL로 연결되는지 직접 눈으로 확인해 보세요.
아래 경로로 이동하여 파일을 열어보세요. $(HANDSTACK_SRC)/2.Modules/[모듈 ID]/Areas
$(HANDSTACK_SRC)/2.Modules/[모듈 ID]/Areas
*Controller.cs 파일을 열어 Controller 이름과 Action 이름을 확인하고 URL을 유추해 보세요.
*Controller.cs
Pages 폴더 안의 .cshtml 파일 경로를 보고 URL이 어떻게 될지 생각해 보세요.
Pages
.cshtml
웹 브라우저로 경로를 확인해봅니다.
네, 가능합니다.
HandStack은 자동 kebab-case 라우팅을 기본으로 제공하지만, 필요에 따라 URL을 직접 지정할 수도 있습니다.
Controller Action에 [Route] 속성을 사용하면 원하는 주소로 변경할 수 있습니다.
[Route]
[HttpGet] [Route("get-my-special-user")] // URL을 직접 지정 public async Task<object> GetUserProfile() { // ... 로직 ... }
이렇게 하면 /user-management/get-my-special-user 와 같이 고정된 주소를 사용할 수 있습니다.
/user-management/get-my-special-user
GET /api/todoitems
GET /api/todoitems/{id}
POST /api/todoitems
PUT /api/todoitems/{id}
DELETE /api/todoitems/{id}
HEAD /api/todoitems
HandStack은 Controllers 와 Pages 라우팅을 미리 설정해 줘서, 개발자가 직접 복잡한 라우팅 규칙을 일일이 설정할 필요 없이 SEO 친화적이고 읽기 쉬운 URL을 생성할 수 있습니다.
클래스명
메서드명
/클래스명/메서드명
폴더/파일명
/폴더/파일명